#ifndef _HQ_FILE_HPP_
#define _HQ_FILE_HPP_

#include <sys/stat.h> // struct stat
#include <stdio.h>
#include <string.h> // memset 

// 自己的文件读取流
class MyFileStream {
public:
	FILE *fp;
	int size;
	char *buf;
	int offset = 0; // 总的偏移

	MyFileStream(const char* path, char *buff) : MyFileStream() {  
		if (!path || !buff) {
			printf("MyFileStream error, param is NULL \n");
			return;
		}
		fp = fopen(path, "rb");
		if (fp == NULL) {
			printf("error open!\n");
			return  ;
		}
		size = getFileSize1(path);
		buf = buff;
	}

	int getnext(int block) {
		char buffer[1024];
		int len = 0;
		while (  len < block && offset<size  )
		{
			size_t count = fread(buffer, sizeof(char), 1024, fp);
			if (count < 1)
				break;
			memcpy(buf + len, buffer, count);
			len += count;
			offset += count;
		} 
		return len;
	}

	~MyFileStream() {
		if (fp == NULL) 
			fclose(fp); 
	}

	// 通过stat结构体 获得文件大小，单位字节
	size_t getFileSize1(const char *fileName) { 
		if (fileName == NULL) {
			return 0;
		} 
		// 这是一个存储文件(夹)信息的结构体，其中有文件大小和创建时间、访问时间、修改时间等
		struct stat statbuf; 
		// 提供文件名字符串，获得文件属性结构体
		stat(fileName, &statbuf); 
		// 获取文件大小
		size_t filesize = statbuf.st_size; 
		return filesize;
	}
private:
    MyFileStream(){
        fp=nullptr;
        size=0;
        buf=nullptr;
        offset = 0; // 总的偏移
    }
};


#endif // _HQ_FILE_HPP_